﻿using System;
using Windows.UI.Xaml.Controls;
using SplitViewOptions;

namespace Walterlv.Colorful.Models
{
    /// <summary>
    /// 包含多彩浏览器中用于导航的所有页面信息列表。
    /// </summary>
    public sealed class NavigationPages
    {
        /// <summary>
        /// 获取主导航栏需要的所有导航页列表。
        /// </summary>
        public PageNavigationItem[] Main { get; } = {
            new PageNavigationItem<Desktop> {Name = "首页", Icon="" },
            new PageNavigationItem<HistoryPage> {Name = "历史/收藏", Icon="" },
            new PageNavigationItem<Desktop> {Name = "微社区", Icon="" },
            new PageNavigationItem<UploadpicPage> {Name = "上传/下载", Icon="" },
        };

        /// <summary>
        /// 获取系统导航栏需要的所有导航页列表。
        /// </summary>
        public PageNavigationItem[] System { get; } = {
            new PageNavigationItem<AboutPage> {Name = "设置", Icon="" },
            new PageNavigationItem<AboutPage> {Name = "关于", Icon="" },
        };
    }

    /// <summary>
    /// 包含用于导航的页面信息。
    /// </summary>
    public class PageNavigationItem
    {
        /// <summary>
        /// 获取导航的页面类型。
        /// </summary>
        public Type Type { get; }

        /// <summary>
        /// 获取或设置导航页面的名称，这将用于显示到导航列表中。
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 获取或设置导航页面的图标。
        /// </summary>
        public string Icon { get; set; }

        /// <summary>
        /// 使用指定的页面类型创建 <see cref="PageNavigationItem"/> 类的新实例。
        /// </summary>
        /// <param name="pageType">导航到的页面类型。</param>
        public PageNavigationItem(Type pageType)
        {
            Type = pageType;
        }
    }

    /// <summary>
    /// 包含特定类型的用于导航的页面信息。
    /// </summary>
    /// <typeparam name="T">导航到的页面类型。</typeparam>
    public class PageNavigationItem<T> : PageNavigationItem where T : Page
    {
        /// <summary>
        /// 使用泛型参数 <typeparamref name="T"/> 指定的页面类型创建 <see cref="PageNavigationItem{T}"/> 类的新实例。
        /// </summary>
        public PageNavigationItem() : base(typeof (T))
        {
        }
    }
}
